package com.jsmtr.rms.utils;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

/*
 * Oracle数据库备份
 */
public class OracleDatabaseBackup {
    /**
     * Oracle数据库导出
     *
     * @param userName 进入数据库所需要的用户名
     * @param password 进入数据库所需要的密码
     * @param SID      用户所在的SID
     * @param savePath 数据库导出文件保存路径
     * @param fileName 数据库导出文件文件名
     * @return 返回true表示导出成功，否则返回false。
     * @author GaoHuanjie
     */
    public boolean exportDatabaseTool(String userName, String password,
                                      String SID, String savePath, String fileName)
            throws InterruptedException {
        File saveFile = new File(savePath);
        if (!saveFile.exists()) {// 如果目录不存在
            saveFile.mkdirs();// 创建文件夹
        }
        try {
            String str = "exp " + userName + "/" + password + "@" + SID
                    + " file=" + savePath + "/" + fileName + ".dmp";
            Process process = Runtime.getRuntime().exec(str);
            try {
                String line = null;
                BufferedReader br = new BufferedReader(new InputStreamReader(
                        process.getErrorStream()));
                // 读取ErrorStream很关键，这个解决了挂起的问题。
                while ((line = br.readLine()) != null) {
                    System.out.println(line);
                }
            } catch (Exception ioe) {
                ;
            }

            if (process.waitFor() == 0) {// 0 表示线程正常终止。
                return true;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return false;
    }
}
